// vim:sw=4:ai:aw
#pragma once
#ifndef	__Allocator_h__
#define	__Allocator_h__

#ident	"@(#)Allocator.h	1.2	AKK/CII	20090222"

#include "Area.h"	// voor: class Area


// Beschrijving van de INTERFACE van een
// geheugenbeheer algoritme.
class	Allocator
{
    protected: // m.a.w. alleen voor afgeleide classes

	const char	*   type;	// De naam van het algoritme
					// b.v. "FirstFit", "Buddy", etc
	int		    size;	// Hoeveel geheugen beheren we.

	Allocator( const char * type );

    public:	// m.a.w. ook toegangkelijk voor anderen

	virtual	~Allocator() {}

	const char	* getType() const { return type; }
	const int	  getSize() const { return size; }

	// Afgeleide classes MOGEN setSize zelf herdefinieren
	// zolang ze deze methode ook maar aanroepen.

	virtual	void	  setSize(int size);	// Stel de omvang van het
						// te beheren gebied in.

	// Afgeleide classes MOETEN de volgende methodes zelf definieren.

	virtual	const	Area	* alloc(int wanted) = 0;	// Iemand vraagt om geheugen
		// NB: const omdat 'main' de Area's nooit mag veranderen !

	virtual 	void	  free(const Area *) = 0;	// Iemand geeft een Area weer terug

	// ... en hier komen straks de andere functies ...
	// ... om b.v. de overhead te bepalen ...
	// ... of de fragmentatie graad ...

};


#endif	/*Allocator_h*/
